{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import sys\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "sys.path.append(\"../\")\n",
    "from mymodel import utils\n",
    "from mymodel import Show\n",
    "import pickle\n",
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "170580"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# vocab\n",
    "with open(\"../data/timemachine.txt\",'r',encoding=\"utf-8\") as f:\n",
    "    lines = f.readlines()\n",
    "content = [re.sub(\"[^A-Za-z]+\",\" \",line).strip().lower() for line in lines] # 将不是A-Za-z中的一个或多个字符替换为空格\n",
    "tokens = utils.tokenize(content,\"char\") # tokens还是分行2d的\n",
    "# tokens = tokens[:300]\n",
    "vocab = utils.Vocab(tokens) # 词库索引转token，token转索引\n",
    "corpus = [vocab[token] for line in tokens for token in line] # 数字表示的文本\n",
    "len(corpus)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iter\n",
    "batch_size, num_steps = 32, 35\n",
    "device = utils.trygpu(0)\n",
    "class data_iter:\n",
    "    def __init__(self, corpus, use_random_iter=False) -> None:\n",
    "        self.random = use_random_iter\n",
    "        self.corpus = corpus\n",
    "    def __iter__(self):\n",
    "        if self.random:\n",
    "            return utils.seq_data_iter_random(self.corpus, batch_size, num_steps)\n",
    "        else:\n",
    "            return utils.seq_data_iter_seq(self.corpus, batch_size, num_steps)\n",
    "train_iter = data_iter(corpus)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_hidden = 256\n",
    "rnn_layer = nn.LSTM(len(vocab), num_hidden,2) # 用torch的话就是这里多了一个2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mymodel.utils import RNNModel\n",
    "net = RNNModel(rnn_layer, len(vocab)).to(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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VuLw4cN48803cfjwYWzduhW5ubl47LHH7jjugAEDoFQqNY+ff/65LconIiIL42TOF4+MjERkZKTeeR4eHkhJSdGatnLlStx///0oKChAUFBQk+M6OTnBz8/PpLUSEZHlM2uotVZpaSkkSYKnp2ezy50+fRoBAQFwdnZGREQEkpKSmg3B6upqVFdXa56XlZUBqN8FqlKp7lCVIwAJKlVtC9+F9WroxZ17Yl/YF13siX7si36m7IckhBAmG80IkiRh27ZtmDhxot75VVVVePDBB9G3b1988cUXTY7zww8/oLy8HH369IFSqURCQgIuXryInJwcuLm56V0nPj4eCQkJOtM3btwIV1fXZuveGRAFSBImXPy22eWIiEi/yspKPP300ygtLYW7u7tRY1lFqKlUKkyePBkXLlxAenp6q970tWvX0L17dyxfvhyzZ8/Wu4y+LbXAwEAolUp4eXk1O37sMUcADgiACn8LaXFZVkmlUiElJQVjxoyBTCYzdzkWg33RxZ7ox77oV1JSAn9/f5OEmsXvflSpVJg6dSrOnTuHn376qdVv2NPTE71798aZM2eaXEahUEChUOhMl8lkLf7gXYIM9vIZbU1f7An7oos90Y990WbKXlj099QaAu306dPYs2fPHbea9CkvL0deXh78/f3boEIiIrIkZg218vJyZGdnIzs7GwCQn5+P7OxsFBQUQKVS4cknn8ShQ4fwxRdfoK6uDoWFhSgsLERNTY1mjFGjRmHlypWa5/PmzUNGRgbOnj2L/fv3Y9KkSXB0dER0dHR7vz0iImpnZt39eOjQIYwcOVLzPC4uDgAwc+ZMxMfH49tv60++GHTb5fDT0tIwYsQIAEBeXh4uX76smXfhwgVER0ejpKQE3t7eGDZsGA4cOABvb979jIjI1pk11EaMGIHmzlNpyTksZ8+e1Xq+adMmY8siIiIrZdHH1KwBt/+IiCwHQ81Ik9lBIiKLwV/JRho82NwVEBFRA4YaERHZDIYaERHZDIYaERHZDIYaERHZDIYaERHZDINCbf369aisrDR1LUREREYxKNTmz58PPz8/zJ49G/v37zd1TURERAYxKNQuXryIDRs24PLlyxgxYgT69u2Lf/zjHygsLDR1fURERC1mUKg5OTlh0qRJ+Oabb3D+/HnMmTMHX3zxBYKCgvDYY4/hm2++gVqtNnWtREREzTL6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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time traveller saferrang me the course i shouldpursue my first w\n",
      "困惑度 1.0 device: cuda:0\n",
      "time traveller saferrent in which amoighe comes it was as i thin\n",
      "traveller amid such realities as i found here conceive thet\n",
      "[trainRNN] run time :565.3514640331268 seconds\n"
     ]
    },
    {
     "data": {
      "image/png": "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VuLw4cN48803cfjwYWzduhW5ubl47LHH7jjugAEDoFQqNY+ff/65LconIiIL42TOF4+MjERkZKTeeR4eHkhJSdGatnLlStx///0oKChAUFBQk+M6OTnBz8/PpLUSEZHlM2uotVZpaSkkSYKnp2ezy50+fRoBAQFwdnZGREQEkpKSmg3B6upqVFdXa56XlZUBqN8FqlKp7lCVIwAJKlVtC9+F9WroxZ17Yl/YF13siX7si36m7IckhBAmG80IkiRh27ZtmDhxot75VVVVePDBB9G3b1988cUXTY7zww8/oLy8HH369IFSqURCQgIuXryInJwcuLm56V0nPj4eCQkJOtM3btwIV1fXZuveGRAFSBImXPy22eWIiEi/yspKPP300ygtLYW7u7tRY1lFqKlUKkyePBkXLlxAenp6q970tWvX0L17dyxfvhyzZ8/Wu4y+LbXAwEAolUp4eXk1O37sMUcADgiACn8LaXFZVkmlUiElJQVjxoyBTCYzdzkWg33RxZ7ox77oV1JSAn9/f5OEmsXvflSpVJg6dSrOnTuHn376qdVv2NPTE71798aZM2eaXEahUEChUOhMl8lkLf7gXYIM9vIZbU1f7An7oos90Y990WbKXlj099QaAu306dPYs2fPHbea9CkvL0deXh78/f3boEIiIrIkZg218vJyZGdnIzs7GwCQn5+P7OxsFBQUQKVS4cknn8ShQ4fwxRdfoK6uDoWFhSgsLERNTY1mjFGjRmHlypWa5/PmzUNGRgbOnj2L/fv3Y9KkSXB0dER0dHR7vz0iImpnZt39eOjQIYwcOVLzPC4uDgAwc+ZMxMfH49tv60++GHTb5fDT0tIwYsQIAEBeXh4uX76smXfhwgVER0ejpKQE3t7eGDZsGA4cOABvb979jIjI1pk11EaMGIHmzlNpyTksZ8+e1Xq+adMmY8siIiIrZdHH1KwBt/+IiCwHQ81Ik9lBIiKLwV/JRho82NwVEBFRA4YaERHZDIYaERHZDIYaERHZDIYaERHZDIYaERHZDINCbf369aisrDR1LUREREYxKNTmz58PPz8/zJ49G/v37zd1TURERAYxKNQuXryIDRs24PLlyxgxYgT69u2Lf/zjHygsLDR1fURERC1mUKg5OTlh0qRJ+Oabb3D+/HnMmTMHX3zxBYKCgvDYY4/hm2++gVqtNnWtREREzTL6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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "utils.trainRNN(10, net, train_iter, vocab, lr = 1, epochs=500, device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'i am no thought this bence of the psychologist thengett'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "utils.predictRNN(\"i am \", 50,net, vocab, device)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.7.2",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
